package com.macro.mall.service;


import com.macro.mall.mapper.XhsStoreMapper;
import com.macro.mall.model.XhsStore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class XhsStoreService {

    @Autowired
    private XhsStoreMapper xhsStoreMapper;

    /**
     * 批量保存门店信息（先清空表再批量插入）
     * @param stores 门店列表
     * @return 插入的记录数
     */
    @Transactional
    public int batchSaveStores(List<XhsStore> stores) {
        // 1. 清空表
        xhsStoreMapper.truncateTable();

        // 2. 如果传入列表为空，直接返回0
        if (stores == null || stores.isEmpty()) {
            return 0;
        }

        // 3. 批量插入
        return xhsStoreMapper.batchInsert(stores);
    }

    /**
     * 根据ID查询门店
     * @param id 主键ID
     * @return 门店信息
     */
    public XhsStore getById(Long id) {
        return xhsStoreMapper.selectById(id);
    }

    /**
     * 查询所有门店
     * @return 所有门店列表
     */
    public List<XhsStore> getAll() {
        return xhsStoreMapper.selectAll();
    }

    /**
     * 根据POI ID查询门店
     * @param poiId POI唯一标识
     * @return 门店信息
     */
    public XhsStore getByPoiId(String poiId) {
        return xhsStoreMapper.selectByPoiId(poiId);
    }

    /**
     * 根据来源查询门店
     * @param sourceType 来源类型
     * @param sourceId 来源ID
     * @return 门店列表
     */
    public List<XhsStore> getBySource(Integer sourceType, String sourceId) {
        return xhsStoreMapper.selectBySource(sourceType, sourceId);
    }

    /**
     * 更新门店信息
     * @param store 门店信息
     * @return 更新记录数
     */
    @Transactional
    public int update(XhsStore store) {
        return xhsStoreMapper.update(store);
    }

    /**
     * 删除门店
     * @param id 主键ID
     * @return 删除记录数
     */
    @Transactional
    public int delete(Long id) {
        return xhsStoreMapper.delete(id);
    }

    /**
     * 分页查询门店列表
     * @param page 页码
     * @param size 每页大小
     * @param name 门店名称
     * @param city 城市
     * @param poiId POI ID
     * @param phone 手机号
     * @param noPhone 是否查询未设置手机号的门店
     * @return 门店列表
     */
    public List<XhsStore> getStoreList(Integer page, Integer size, String name, String city, String poiId, String phone, Boolean noPhone) {
        int offset = (page - 1) * size;
        return xhsStoreMapper.selectStoreList(offset, size, name, city, poiId, phone, noPhone);
    }

    /**
     * 查询门店总数
     * @param name 门店名称
     * @param city 城市
     * @param poiId POI ID
     * @param phone 手机号
     * @param noPhone 是否查询未设置手机号的门店
     * @return 总数
     */
    public int getStoreCount(String name, String city, String poiId, String phone, Boolean noPhone) {
        return xhsStoreMapper.selectStoreCount(name, city, poiId, phone, noPhone);
    }

    /**
     * 获取城市列表
     * @return 城市列表
     */
    public List<String> getCityList() {
        return xhsStoreMapper.getCityList();
    }

    /**
     * 根据手机号查询门店
     * @param phone 手机号
     * @return 门店信息
     */
    public XhsStore getByPhone(String phone) {
        return xhsStoreMapper.selectByPhone(phone);
    }

    /**
     * 更新门店手机号
     * @param id 门店ID
     * @param phone 手机号
     * @return 更新记录数
     */
    @Transactional
    public int updatePhone(Long id, String phone) {
        return xhsStoreMapper.updatePhone(id, phone);
    }
}
